
#include "function.h"

//二叉树的建立（层次建树）
int main() {
    BiTree pnew;//用来指向新申请的树结点
    BiTree tree = NULL;//tree是指向树根的，代表树
    char c;
    //phead和ptail：队列头和队列尾，list_pnew：链表新结点，pcur表示当前树的父节点
    ptag_t phead = NULL, ptail = NULL, list_pnew = NULL, pcur = NULL;
    //abcdefg
    //scanf的返回值是bool类型
    while (scanf("%c", &c)) {
        if (c == '\n') break;//读取到换行的结束
        //calloc申请的空间大小是两个参数直接相乘，并对空间进行初始化，赋值为0
        pnew = (BiTree) calloc(1, sizeof(BiTNode));
        pnew->c = c;
        //给队列结点申请空间
        list_pnew = (ptag_t) calloc(1, sizeof(tag_t));
        //队列放入申请的结点
        list_pnew->p = pnew;
        //如果是树的第一个结点
        if (tree == NULL) {
            tree = pnew;//tree指向树的根结点
            //第一个结点既是队列头也是队列尾
            phead = list_pnew;
            ptail = list_pnew;
            pcur = list_pnew;//pcur要指向要进入树的父亲元素
        } else {
            //让元素先入队列
            //队尾元素+1
            ptail->next = list_pnew;
            ptail = list_pnew;
            //接下来把b元素结点放入树中
            if (pcur->p->lchild == NULL) {
                pcur->p->lchild = pnew;//pcur->p左孩子为空
            } else if (pcur->p->rchild == NULL) {
                pcur->p->rchild = pnew;
                //因为当前父亲结点已经满了（左右孩子都有了）
                //pcur就指向下面一个结点
                pcur = pcur->next;
            }
        }
    }
    return 0;
}
